<?php
/**
 * Класс Controller_Ajax_Field отвечает за обработку ajax-запросов стадионов
 * @author Mike
 */
class Controller_Ajax_Field extends Controller_Ajax {
	
	public function actionSwitch() {
		switch ($this->arrRequest[2]) {
			case 'add-marker' : 
				$this->actionAddMarker();
				break;
			case 'get-markers' :
				$this->actionGetMarkers();
				break;
			case 'get-nearest-city' :
				$this->actionGetNearestCityMarkers();
				break;
			default:
				$this->setError(404);
				break;
		}
	}
	
	/**
	 * Добавление маркера на стадион
	 */
	private function actionAddMarker() {
		$cityId = isset($_POST['ID_city']) ? Service_Escape::absolutelyEscapeString($_POST['ID_city']) : '';
		$latitude = isset($_POST['latitude']) ? Service_Escape::absolutelyEscapeString($_POST['latitude']) : '';
		$longitude = isset($_POST['longitude']) ? Service_Escape::absolutelyEscapeString($_POST['longitude']) : '';
		$description = isset($_POST['description']) ? Service_Escape::absolutelyEscapeString($_POST['description']) : '';
		$cost = isset($_POST['cost']) ? Service_Escape::absolutelyEscapeString($_POST['cost']) : '';
		$type = isset($_POST['type']) ? Service_Escape::absolutelyEscapeString($_POST['type']) : '';

		if (empty($cityId) || empty($latitude) || empty($longitude) || empty($description) || empty($cost) || empty($type)) return $this->makeStandardError('Не получены данные');
		
		$objCity = new City($cityId);
		if(!$objCity->id) return $this->makeStandardError('Нет такого города');

		$markerArray = array(
				'ID_city' => $cityId,
				'latitude' => $latitude,
				'longitude' => $longitude,
				'description' => $description,
				'cost' => $cost,
				'type' => $type
				);
		$objFieldMarker = new FieldMarker();
		$objFieldMarker->setFields($markerArray);
		if($objFieldMarker->save()) $this->arrReturn = array('result' => 'OK');
	}
	
	/**
	 * Получает маркеры для города
	 * 
	 * @param int cityId - id города, если есть, значит метод вызывается из actionGetNearestCityMarkers и id города не нужно брать из $_POST
	 * @return array - массив маркеров
	 */
	private function actionGetMarkers() {
			$cityId = isset($_POST['ID_city']) ? Service_Escape::absolutelyEscapeString($_POST['ID_city']) : '';

			if (empty($cityId)) return $this->makeStandardError('Не получены данные');
	
			$objCity = new City($cityId);
			if(!$objCity->id) return $this->makeStandardError('Нет такого города');
		
		$markersArray = FieldMarker::getMarkers($objCity->id);
		$this->arrReturn = array('result' => 'OK','markersArray' => $markersArray, 'cityCoordinates' => array($objCity->getField('latitude'),$objCity->getField('longitude')));
	}
	
	/**
	 * Вычисляем ближайший город для заданных координат и получаем маркеры для них
	 */
	private function actionGetNearestCityMarkers() {
		$latitude = isset($_POST['latitude']) ? Service_Escape::absolutelyEscapeString($_POST['latitude']) : '';
		$longitude = isset($_POST['longitude']) ? Service_Escape::absolutelyEscapeString($_POST['longitude']) : '';
	
		if (empty($latitude) || empty($longitude)) return $this->makeStandardError('Не получены данные');
		
		$cityId = City::findNearest($latitude, $longitude);
		if(!$cityId) return $this->makeStandardError('Не удалось найти ближайший город');
		
		$objCity = new City($cityId);
		
		$markersArray = FieldMarker::getMarkers($objCity->id);
		$this->arrReturn = array('result' => 'OK','markersArray' => $markersArray, 'cityCoordinates' => array($objCity->getField('latitude'), $objCity->getField('longitude')),'city_name' => $objCity->getField('city_name'), 'ID_city' => $objCity->id);
	}
	
}
?>